/******************************************************************************

                  版权所有 (C), LC.Ltd

 ******************************************************************************
  文 件 名   : Icc_Core.c
  版 本 号   : 初稿
  作    者   : Jason
  生成日期   : 2012年8月22日
  最近修改   :
  功能描述   : 管理ICC对象的分配与回收
  函数列表   :
  修改历史   :
  1.日    期   : 2012年8月22日
    作    者   : Jason
    修改内容   : 创建文件

******************************************************************************/

/*----------------------------------------------*
 * 包含头文件                                   *
 *----------------------------------------------*/
	 
#include <stdint.h>
#include "icc.h"
#include "mpool.h"

#define TOTAL_ICC	5
/*----------------------------------------------*
 * 外部变量说明                                 *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 外部函数原型说明                             *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 内部函数原型说明                             *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 全局变量                                     *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 模块级变量                                   *
 *----------------------------------------------*/
static MPool ICC_MemPool;
static uint8_t mem_pool[sizeof(icc_t) * TOTAL_ICC];
/*----------------------------------------------*
 * 常量定义                                     *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 宏定义                                       *
 *----------------------------------------------*/

//icc_t ICC1;

void IccPool_Init(void)
{
	MPool_Init(&ICC_MemPool, mem_pool, sizeof(mem_pool), sizeof(icc_t));
}

icc_t *IccPool_Get(void)
{
	icc_t *icc;

	icc = (icc_t *)MPool_Get(&ICC_MemPool);
	if(icc != 0)
	{
		ICC_DefaultInit(icc);
	}
	else
	{
#ifndef NDEBUG
		while(1)
		{}
#endif
	}
	return icc;
}


uint32_t IccPool_Put(icc_t *icc)
{
	MPool_Put(&ICC_MemPool, icc);
	return 0;
}

